#!/usr/bin/env node

const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');

console.log('🚀 开始构建项目...\n');

// 清理构建目录
console.log('🧹 清理构建目录...');
if (fs.existsSync('assets')) {
    fs.rmSync('assets', { recursive: true, force: true });
}

// 运行 ESLint
console.log('🔍 运行代码检查...');
try {
    execSync('npm run lint', { stdio: 'inherit' });
    console.log('✅ 代码检查通过\n');
} catch (error) {
    console.error('❌ 代码检查失败');
    process.exit(1);
}

// 运行测试
console.log('🧪 运行测试...');
try {
    execSync('npm test', { stdio: 'inherit' });
    console.log('✅ 测试通过\n');
} catch (error) {
    console.error('❌ 测试失败');
    process.exit(1);
}

// 构建项目
console.log('📦 构建项目...');
try {
    execSync('webpack --mode=production', { stdio: 'inherit' });
    console.log('✅ 构建完成\n');
} catch (error) {
    console.error('❌ 构建失败');
    process.exit(1);
}

// 检查构建输出
console.log('🔍 检查构建输出...');
const assetsDir = path.join(__dirname, '..', 'assets');
if (!fs.existsSync(assetsDir)) {
    console.error('❌ 构建输出目录不存在');
    process.exit(1);
}

const pluginFile = path.join(assetsDir, 'plugin.js');
if (!fs.existsSync(pluginFile)) {
    console.error('❌ plugin.js 文件不存在');
    process.exit(1);
}

// 检查文件大小
const stats = fs.statSync(pluginFile);
const fileSizeKB = Math.round(stats.size / 1024);
console.log(`📊 构建文件大小: ${fileSizeKB} KB`);

if (fileSizeKB > 500) {
    console.warn('⚠️  文件大小超过 500KB，请考虑优化');
}

// 生成构建信息
const buildInfo = {
    timestamp: new Date().toISOString(),
    version: require('../package.json').version,
    fileSize: fileSizeKB,
    nodeVersion: process.version
};

fs.writeFileSync(
    path.join(assetsDir, 'build-info.json'),
    JSON.stringify(buildInfo, null, 2)
);

console.log('✅ 构建完成！');
console.log(`📁 输出目录: ${assetsDir}`);
console.log(`📄 主文件: plugin.js`);
console.log(`📊 文件大小: ${fileSizeKB} KB`);
console.log(`⏰ 构建时间: ${new Date().toLocaleString()}`);
